]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ScreenShield: use LayoutManager for creating the actor
authorGiovanni Campagna <gcampagna@src.gnome.org>
Tue, 22 May 2012 21:22:38 +0000 (23:22 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Sat, 21 Jul 2012 13:40:28 +0000 (15:40 +0200)
This ensures that the screen shield is created at the right
stacking level, so the message tray is visible in the lock screen
(showing PAM messages, critical notifications and the on screen
keyboard)

https://bugzilla.gnome.org/show_bug.cgi?id=619955

js/ui/layout.js
js/ui/screenShield.js

index 6b87fd80bbfa6a5abf458e4ff91251b86b539938..5175006ceb79cf92e8ad588055aafffe4fad245a 100644 (file)
@@ -40,6 +40,17 @@ const LayoutManager = new Lang.Class({
         this.panelBox.connect('allocation-changed',
                               Lang.bind(this, this._updatePanelBarriers));
 
+        this.screenShieldGroup = new St.Widget({ name: 'screenShieldGroup',
+                                                 visible: false
+                                               });
+        // FIXME: This is going to slow everything down by a big factor
+        // Need a better solution (like a layout manager?)
+        let constraint = new Clutter.BindConstraint({ source: global.stage,
+                                                      coordinate: Clutter.BindCoordinate.ALL
+                                                    });
+        this.screenShieldGroup.add_constraint(constraint);
+        this.addChrome(this.screenShieldGroup);
+
         this.trayBox = new St.BoxLayout({ name: 'trayBox' }); 
         this.addChrome(this.trayBox);
         this.trayBox.connect('allocation-changed',
index 2ba86b082aba212439fe8d17da760050f0ce14fa..060bd0283e7aff9f2c3608e1ee0cb2d5ab926f8c 100644 (file)
@@ -29,6 +29,8 @@ const ScreenShield = new Lang.Class({
     Name: 'ScreenShield',
 
     _init: function() {
+        this.actor = Main.layoutManager.screenShieldGroup;
+
         this._presence = new GnomeSession.Presence(Lang.bind(this, function(proxy, error) {
             if (error) {
                 logError(error, 'Error while reading gnome-session presence');
@@ -45,18 +47,12 @@ const ScreenShield = new Lang.Class({
 
         this._isModal = false;
         this._isLocked = false;
-        this._group = new St.Widget({ x: 0,
-                                      y: 0 });
-        Main.uiGroup.add_actor(this._group);
-        let constraint = new Clutter.BindConstraint({ source: global.stage,
-                                                      coordinate: Clutter.BindCoordinate.POSITION | Clutter.BindCoordinate.SIZE });
-        this._group.add_constraint(constraint);
-
-        this._lightbox = new Lightbox.Lightbox(this._group,
+
+        this._lightbox = new Lightbox.Lightbox(Main.uiGroup,
                                                { inhibitEvents: true, fadeInTime: 10, fadeFactor: 1 });
+
         this._background = Meta.BackgroundActor.new_for_screen(global.screen);
-        this._background.hide();
-        Main.uiGroup.add_actor(this._background);
+        this.actor.add_actor(this._background);
     },
 
     _onStatusChanged: function(status) {
@@ -66,9 +62,8 @@ const ScreenShield = new Lang.Class({
                 this._dialog = null;
             }
 
-            this._group.reactive = true;
             if (!this._isModal) {
-                Main.pushModal(this._group);
+                Main.pushModal(this.actor);
                 this._isModal = true;
             }
 
@@ -88,10 +83,10 @@ const ScreenShield = new Lang.Class({
     },
 
     _popModal: function() {
-        this._group.reactive = false;
-        Main.popModal(this._group);
+        this._lightbox.hide();
 
-        this._background.hide();
+        Main.popModal(this.actor);
+        this.actor.hide();
 
         this._isModal = false;
         this._isLocked = false;